/*
 * @Author: ZhanXie
 * @Date: 2020-03-09 15:10:55
 * @LastEditors: ZhanXie
 * @LastEditTime: 2020-03-09 15:13:38
 * @Description: 处理这些转换函数的调用逻辑
 * @FilePath: /projectStudy/ts-axios/src/core/transform.ts
 */

import { AxiosTransformer } from '../types'

/**
 * transform` 函数中接收 `data`、`headers`、`fns` 3 个参数，
 * 遍历 `fns`，执行这些转换函数，并且把 `data` 和 `headers` 作为参数传入，
 * 每个转换函数返回的 `data` 会作为下一个转换函数的参数 `data` 传入
 * @param data
 * @param headers
 * @param fns 代表一个或者多个转换函数
 */
export default function transform(
  data: any,
  headers: any,
  fns?: AxiosTransformer | AxiosTransformer[]
): any {
  if (!fns) {
    return data
  }
  if (!Array.isArray(fns)) {
    fns = [fns]
  }
  fns.forEach(fn => {
    data = fn(data, headers)
  })
  return data
}
